import axios from 'axios'
import qs from 'qs'
import { tansParams } from './util-new'
import { message } from 'ant-design-vue'
// message的基础配置
message.config({
  duration: 3, // 提示时常单位为s
  top: '40px', // 距离顶部的位置
  maxCount: 3 // 最多显示提示信息条数(后面的会替换前面的提示)
})

let baseURL = (process.env.NODE_ENV == 'development' ? '/api':process.env.VUE_APP_API_BASE_URL )
//axios.defaults.withCredentials = true// Cookie跨域
// 是否显示重新登录
export let isRelogin = { show: false };
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分
  baseURL: baseURL,
  // 超时
  timeout: 5000
})

// request拦截器
service.interceptors.request.use(config => {
  // 是否需要设置 token
  const isToken = (config.headers || {}).isToken === false
  // 是否需要防止数据重复提交
  // const isRepeatSubmit = (config.headers || {}).repeatSubmit === false

  if (sessionStorage.getItem('TOKEN') && !isToken) {
    config.headers['token'] = sessionStorage.getItem('TOKEN') // 让每个请求携带自定义token 请根据实际情况自行修改
  }
  // get请求映射params参数
  if (config.method === 'get' && config.params) {
    let url = config.url + '?' + tansParams(config.params);
    url = url.slice(0, -1);
    config.params = {};
    config.url = url;
  }
  if (config.type === 'form') {
    let data = qs.stringify(config.data)
    config.data = data
    config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
  } else if(config.type == 'upload' && config.data){
    config.headers['Content-Type'] = 'multipart/form-data; charset=UTF-8'
  } else {
    config.headers['Content-Type'] = 'application/json'
  }
  return config
}, error => {
  console.log(error)
  Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
  // 未设置状态码则默认成功状态
  const code = res.status || 200;
  // // 获取错误信息
  const msg = res.data.msg
  // 二进制数据则直接返回
  if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
    return res.data
  }
  if (code === 401) {
    return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
  } else if (code === 500) {
    return Promise.reject(new Error(msg))
  } else {
    if (res.data.code !== 200) {

      // message.warning(res.data.msg)
     if(res.data.code == 100005){
      sessionStorage.removeItem('USER')
      sessionStorage.removeItem('MENU')
      sessionStorage.removeItem('TOKEN')
      sessionStorage.clear()
      window.location.href = '#/login'
      window.localStorage.clear();
     }
      return res.data
    } else {
      return res.data
    }

  }
},
  error => {
    let messagetxt = ''
    if (error.message == "Network Error") {
      messagetxt = "网络连接异常，请刷新页面";
    }
    else if (error.message.includes("timeout")) {
      messagetxt = "系统接口请求超时";
    } else if (error.message == '数据正在处理，请勿重复提交') {
      messagetxt = "数据正在处理，请勿重复提交";
    }
    else if (error.message.includes("Request failed with status code")) {
      if (error.message.substr(error.message.length - 3) == 401) {
        messagetxt = "无权限，请重新登陆";

      } else {
        messagetxt = "系统接口报错";
      }
    }
    console.log(messagetxt)
    // message.error(messagetxt)
    return Promise.reject(error);
  }
)

export default service

